import { Capacitor, registerPlugin, PluginListenerHandle } from '@capacitor/core'

export interface SystemOverlayPlugin {
  /**
   * 检查是否有系统悬浮窗权限
   */
  checkOverlayPermission(): Promise<{ hasPermission: boolean }>
  
  /**
   * 请求系统悬浮窗权限
   */
  requestOverlayPermission(): Promise<{ granted: boolean; message?: string }>
  
  /**
   * 显示系统级悬浮窗
   */
  showSystemOverlay(options: {
    x?: number
    y?: number
    width?: number
    height?: number
  }): Promise<void>
  
  /**
   * 隐藏系统级悬浮窗
   */
  hideSystemOverlay(): Promise<void>
  
  /**
   * 更新悬浮窗位置
   */
  updateOverlayPosition(options: {
    x: number
    y: number
  }): Promise<void>

  /** 监听悬浮窗移动（吸边后回调当前位置） */
  addListener(eventName: 'overlayMoved', listenerFunc: (data: { x: number; y: number }) => void): Promise<PluginListenerHandle>
  /** 监听悬浮球点击（用于在前端切换助手面板显示/隐藏） */
  addListener(eventName: 'overlayToggle', listenerFunc: () => void): Promise<PluginListenerHandle>
  /** 清理所有监听器 */
  removeAllListeners(): Promise<void>

  /**
   * 查询并清除一次性待处理的切换标记（用于冷启动/恢复前台时防丢事件）
   */
  getAndClearPendingToggle(): Promise<{ pending: boolean }>

  /**
   * 查询并清除一次性待处理的输入文本（来自系统 Overlay WebView 的 sendMessage）
   */
  getAndClearPendingInput(): Promise<{ text?: string }>

  /**
   * 写入 Overlay 的 AI 配置（JSON 串），原生侧会保存到 SharedPreferences
   * 仅 Android 生效；建议字段：provider, model, apiKey, baseUrl?, temperature?, topP?
   */
  setAiConfig(options: { configJson: string }): Promise<void>

  /**
   * 读取当前保存的 AI 配置（测试/调试用）
   */
  getOverlayAiConfig(): Promise<{ configJson?: string }>
}

// 使用 registerPlugin 跨平台注册，以获得事件订阅能力
const SystemOverlay = registerPlugin<SystemOverlayPlugin>('SystemOverlay')

export default SystemOverlay
